웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > js

[자바스크립트] arguments.callee 속성 알아보기

Last Modified : 2019-11-11 / Created : 2015-07-08
10,512
View Count
자바스크립트의 재귀함수 등에 자주 쓰이는 arguments 객체의 callee 속성에 대하여 알아보려 합니다.

자바스크립트의 함수는 arguments 객체를 가지고 있습니다. 이를 사용하면 현재 실행중인 함수 개체를 반환하는데 함수 실행시 넘어온 인지(arguments)는 물론 callee()를 사용해 재귀함수로써 반복도 가능하게 됩니다.

arguments.callee()


자바스크립트의 함수는 전달받은 매개변수를 특정한 객체 arguments에 담고 있습니다. 그래서 만약 코드에서 함수에 전달된 매개변수에 접근할 경우 선언된 변수명을 사용할 수도 있지만 다른 방법으로 arguments를 사용할 수 있습니다.

arguments를 사용하면 아래처럼 접근이 가능합니다.
var test = function(a, b, c) {
  return arguments[0] + arguments[1] + arguments[2];
};

위 코드를 실행하면 index인 순번으로 인자 값에 접근이 가능합니다.
test(1,2,3); // 6을 반환

즉 함수 내부에서 변수명인 a, b, c를 사용하지 않아도 arguments 객체로 접근이 가능하죠.


@ arguments는 배열 타입? No !
참고로 arguments는 배열의 형태를 띠고 있지만 배열은 아닙니다. 배열이 가지는 기본 프로퍼티와는 다르므로 객체로 보는 것이 맞을 것입니다.




! arguments 객체를 사용하여 재귀함수 만드는 예제

간단하게 예를 들어 보겠습니다. 만약 0부터 n까지의 합을 구하는 함수를 만든다면 어떻게 해야할까요? 아래와 같이 재귀함수를 이용하면 코드를 간결하게 만들 수 있습니다.
function test(num) {
  if (num == 0) {
    return num;
  }
  else {
    return num + arguments.callee(num-1);
  }
}

아래와 같이 값을 출력해봅니다.
test(2);
// 3을 반환

test(10);
// 55를 반환

재귀함수는 여러번 반복해야 하는 연산을 더 간단하게 구현할 수 있도록 도와주므로 이런 팬턴에 대하여 익혀두면 상당히 유용할 것입니다.


! 참고사항


ES 6의 arrow function인 화살표 함수에서는 arguments 객체를 가지고 있지 않습니다. 즉 위와 같은 방법으로 재귀함수를 만들 수 없으니 참고하세요. 그 외에 arrow function 만의 고유 특징들을 가지고 있습니다.

아래의 글도 찾고 계시지 않나요?

    Previous

    [제이쿼리] getJSON() 메소드 비동기 데이터 받아오기

    Previous

    [제이쿼리] 부모요소 선택하는 방법 parent(), parents(), closest()